<?php

class Default_Model_QueueManager
{ 
    public $QueueID;
    public $Param; 
    function __construct($ID=NULL, $Param=NULL)
    {
        $this->QueueID = $ID;
        $this->Param   = $Param;
    }

    function SendMessage ($OnCompleteURL = NULL)
    { 
        $notify    = QUEUE_DATA . "/notify/ping"; # TO DO: Config
        $MSGKEY    = $this->QueueID;  # TO DO: Config 
        $Id        = gen_uuid(); #time(); # TO DO: UUID?
        $Request   = array();
        $Request[] = "<Request>"; 
        $Request[] = "<id>{$Id}</id>";
        while (list($name, $value) = each ($this->Param)) {
            $Request[] = "<{$name}><![CDATA[{$value}]]></{$name}>";
        }
        $Request[] = "</Request>";
        $Request = implode ("\n", $Request); 
        file_put_contents ($notify, $Request); 

        if ($OnCompleteURL) { 
            echo "<div id='dbx'>Contacting server........</div>\n";   
            echo "<script>\n";   
            echo "WatchProgressById('{$Id}', '$OnCompleteURL');\n";  
            echo "</script>\n";
        } 

        return $Id;
    } 
}


function gen_uuid() {
    return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
        // 32 bits for "time_low"
        mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),

        // 16 bits for "time_mid"
        mt_rand( 0, 0xffff ),

        // 16 bits for "time_hi_and_version",
        // four most significant bits holds version number 4
        mt_rand( 0, 0x0fff ) | 0x4000,

        // 16 bits, 8 bits for "clk_seq_hi_res",
        // 8 bits for "clk_seq_low",
        // two most significant bits holds zero and one for variant DCE1.1
        mt_rand( 0, 0x3fff ) | 0x8000,

        // 48 bits for "node"
        mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff )
    );
}
